package com.agile.leetcode.jvm.objectreference;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

/**
 * 对其的处理与未引用的效果一样，当 JVM 启动 GC（Garbage Collection，垃圾回收） 时，会直接将这个对象进行回收。
 * 使用场景：
 * 给一个对象设置虚引用状态的唯一目的就是在这个对象被垃圾回收器回收时希望能收到一个系统通知。
 * 虚引用与软引用和弱引用的一个区别在于：
 * 虚引用必须和引用队列 ReferenceQueue 联合使用。当垃圾回收器准备回收一个对象时，
 * 如果发现它还有虚引用，就会在回收对象的内存之前，把这个虚引用加入到与之关联的引用队列中。
 * 程序可以通过判断引用队列中是否已经加入了虚引用，来了解被引用的对象是否将要进行垃圾回收。
 * 如果程序发现某个虚引用已经被加入到引用队列，那么就可以在所引用的对象的内存被回收之前采取必要的行动
 *
 * @Author:ChenZhangKun
 * @Date: 2021/10/11 22:41
 */
public class PhantomReferenceDemo {
    public static void main(String[] args) {
        PhantomReference<Object> phantom = new PhantomReference<>(new Object(), new ReferenceQueue<Object>());
        // 输出null
        System.out.println(phantom.get());
    }
}
